package board.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLEncoder;

import board.dao.BoardDao;
import board.vo.Board;

import com.opensymphony.xwork2.ActionSupport;

//파일 다운로드 액션
public class FileDownloadAction extends ActionSupport {
	private int boardnum;				//파일이 첨부된 글번호
	
	private String contentType;
	private String contentDisposition;
	private InputStream inputStream;
	private long contentLength;
	
	public String execute() {
		try {
			String savedfile = null;
			String originalfile = null;
			String basePath = null;

			Board board = new BoardDao().getBoard(boardnum);	//해당 번호의 Board객체
			savedfile = board.getSavedfile();					//서버에 저장된 파일명
			originalfile = board.getOriginalfile();				//원래 파일명
			basePath = getText("board.uploadpath");				//user.properties에 정의된 파일 저장 경로
			
			String serverFullPath = basePath + "/" + savedfile;	//서버에 저장된 파일의 전체 경로
			
			File file = new File(serverFullPath);
			setContentLength(file.length());					//파일크기
			setContentDisposition("attachment;filename=" + URLEncoder.encode(originalfile, "UTF-8")); 	//파일의 원래 이름
			
			inputStream = new FileInputStream(serverFullPath);	//다운로드할 스트림
		
		}
		catch (Exception ex) {
			
		}
		return SUCCESS;
	}

	public int getBoardnum() {
		return boardnum;
	}

	public void setBoardnum(int boardnum) {
		this.boardnum = boardnum;
	}

	public String getContentType() {
		return contentType;
	}

	public void setContentType(String contentType) {
		this.contentType = contentType;
	}

	public String getContentDisposition() {
		return contentDisposition;
	}

	public void setContentDisposition(String contentDisposition) {
		this.contentDisposition = contentDisposition;
	}

	public InputStream getInputStream() {
		return inputStream;
	}

	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	public long getContentLength() {
		return contentLength;
	}

	public void setContentLength(long contentLength) {
		this.contentLength = contentLength;
	}
}
